/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mamesoft.namibiamc.beans;

import com.mamesoft.namibiamc.tools.JDBC;
import com.mamesoft.namibiamc.tools.Utility;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.ResultSet;
import hirondelle.date4j.DateTime;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author simone
 */
public class DatiMedicoBean implements Serializable{

    private LoginBean loginBean;
    private String nome = null;
    private String cognome = null;
    private String sesso = null;
    private String dataNascita = null;
    private String luogoNascita = null;
    private String indirizzo = null;
    private String cap = null;
    private String longitudine = null;
    private String latitudine = null;
    private boolean dbAccessed = false;
    private String email = null;

    private void initBean() {
        try {
            Connection c = JDBC.connect();
            String q = "SELECT nome,cognome,sesso,data_nascita,luogo_nascita,indirizzo,cap,longitudine,latitudine FROM anagrafe WHERE id='" + getLoginBean().getId() + "';";
            ResultSet set = JDBC.executeQuery(q, c);
            if (set.next()) {
                setNome(set.getString("nome"));
                setCognome(set.getString("cognome"));
                setSesso(set.getString("sesso"));
                setLuogoNascita(set.getString("luogo_nascita"));
                setIndirizzo(set.getString("indirizzo"));
                setCap(set.getString("cap"));
                setLongitudine(set.getString("longitudine"));
                setLatitudine(set.getString("latitudine"));
                Timestamp t = set.getTimestamp("data_nascita");
                DateTime f = new DateTime(t.toString());
                setDataNascita(f.format("DD/MM/YYYY"));
                setDbAccessed(true);
            }

            q = "SELECT email FROM medico WHERE id='" + getLoginBean().getId() + "'";
            set = JDBC.executeQuery(q, c);
            if (set.next()) {
                setEmail(set.getString("email"));
            }
            if (longitudine == null || latitudine == null) {
                List<String> coo = Utility.fetchCoordinate(luogoNascita);
                setLongitudine(coo.get(Utility.LONGITUDINE));
                setLatitudine(coo.get(Utility.LATITUDINE));
                q = "UPDATE anagrafe set longitudine='"+coo.get(Utility.LONGITUDINE) +"' , latitudine='"+coo.get(Utility.LATITUDINE) +"' WHERE id = '"+getLoginBean().getId()+"';";
                JDBC.executeStatement(q, c);
            }
            c.close();
            set.close();
        } catch (Exception ex) {
            Logger.getLogger(DatiPazienteBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * @return the nome
     */
    public String getNome() {
        if (nome == null && !isDbAccessed()) {
            initBean();
        }
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the cognome
     */
    public String getCognome() {
        if (cognome == null && !isDbAccessed()) {
            initBean();
        }
        return cognome;
    }

    /**
     * @param cognome the cognome to set
     */
    public void setCognome(String cognome) {
        this.cognome = cognome;
    }

    /**
     * @return the sesso
     */
    public String getSesso() {
        if (sesso == null && !isDbAccessed()) {
            initBean();
        }
        return sesso;
    }

    /**
     * @param sesso the sesso to set
     */
    public void setSesso(String sesso) {
        this.sesso = sesso;
    }

    /**
     * @return the dataNascita
     */
    public String getDataNascita() {
        if (dataNascita == null && !isDbAccessed()) {
            initBean();
        }
        return dataNascita;
    }

    /**
     * @param dataNascita the dataNascita to set
     */
    public void setDataNascita(String dataNascita) {
        this.dataNascita = dataNascita;
    }

    /**
     * @return the luogoNascita
     */
    public String getLuogoNascita() {
        if (luogoNascita == null && !isDbAccessed()) {
            initBean();
        }
        return luogoNascita;
    }

    /**
     * @param luogoNascita the luogoNascita to set
     */
    public void setLuogoNascita(String luogoNascita) {
        this.luogoNascita = luogoNascita;
    }

    /**
     * @return the indirizzo
     */
    public String getIndirizzo() {
        if (indirizzo == null && !isDbAccessed()) {
            initBean();
        }
        return indirizzo;
    }

    /**
     * @param indirizzo the indirizzo to set
     */
    public void setIndirizzo(String indirizzo) {
        this.indirizzo = indirizzo;
    }

    /**
     * @return the cap
     */
    public String getCap() {
        if (cap == null && !isDbAccessed()) {
            initBean();
        }
        return cap;
    }

    /**
     * @param cap the cap to set
     */
    public void setCap(String cap) {
        this.cap = cap;
    }

    /**
     * @return the longitudine
     */
    public String getLongitudine() {
        if (longitudine == null && !isDbAccessed()) {
            initBean();
        }
        return longitudine;
    }

    /**
     * @param longitudine the longitudine to set
     */
    public void setLongitudine(String longitudine) {
        this.longitudine = longitudine;
    }

    /**
     * @return the latitudine
     */
    public String getLatitudine() {
        if (latitudine == null && !isDbAccessed()) {
            initBean();
        }
        return latitudine;
    }

    /**
     * @param latitudine the latitudine to set
     */
    public void setLatitudine(String latitudine) {
        this.latitudine = latitudine;
    }

    /**
     * @return the loginBean
     */
    public LoginBean getLoginBean() {
        return loginBean;
    }

    /**
     * @param loginBean the loginBean to set
     */
    public void setLoginBean(LoginBean loginBean) {
        this.loginBean = loginBean;
    }

    /**
     * @return the dbAccessed
     */
    public boolean isDbAccessed() {
        return dbAccessed;
    }

    /**
     * @param dbAccessed the dbAccessed to set
     */
    public void setDbAccessed(boolean dbAccessed) {
        this.dbAccessed = dbAccessed;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        if (email == null && !isDbAccessed()) {
            initBean();
        }
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }
}